package com.satan.juc.demo21;

import java.util.Date;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @Author: Demon
 * @Date: 2024/3/29 21:16
 * @Description:
 **/
public class ScheduledThreadPoolExample {
    public static void main(String[] args) {
        ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(4);
        // 创建一个 Runnable 任务
        Runnable task = () -> System.out.println(Thread.currentThread().getName()+" Task executed at: " + new Date());

        // 安排任务在延迟3秒后执行
        executor.schedule(task, 3, TimeUnit.SECONDS);

        // 安排任务在延迟1秒后，每2秒执行一次
        executor.scheduleAtFixedRate(task, 1, 2, TimeUnit.SECONDS);

        // 安排任务在延迟1秒后，每次执行结束后等待2秒再执行
        executor.scheduleWithFixedDelay(task, 1, 2, TimeUnit.SECONDS);

        // 模拟长时间运行的程序，以便观察定时任务的执行
        try {
            TimeUnit.MINUTES.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 关闭执行器
        executor.shutdown();
    }
}
